/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package co.uniminuto.edu.gimnasioInteligente.beans;

import co.uniminuto.edu.gimnasioInteligente.entities.Actividad;
import co.uniminuto.edu.gimnasioInteligente.entities.ProgramacionEvento;
import co.uniminuto.edu.gimnasioInteligente.entities.Sede;
import co.uniminuto.edu.gimnasioInteligente.entities.Usuario;
import co.uniminuto.edu.gimnasioInteligente.session.ActividadFacade;
import co.uniminuto.edu.gimnasioInteligente.session.ProgramacionEventoFacade;
import co.uniminuto.edu.gimnasioInteligente.session.SedeFacade;
import co.uniminuto.edu.gimnasioInteligente.session.UsuarioFacade;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.model.SelectItem;

/**
 *
 * @author diegoalejandro
 */
@ManagedBean(name = "crearEventosBean")
public class crearEventoBean {

    //EJBs
    @EJB
    UsuarioFacade myUsuarioSession;
    @EJB
    ActividadFacade myActividadSession;
    @EJB
    SedeFacade mySedeSession;
    @EJB
    ProgramacionEventoFacade myprogramacionEventoSession;
    //Listas Entities
    private List<Actividad> actividadList;
    private List<Sede> sedeList;
    private List<Usuario> usuarioList;
    //Listas SelectItem
    private List<SelectItem> actividadSelectItem;
    private List<SelectItem> sedeSelectItem;
    private List<SelectItem> lugarFisicoSelectItem;
    private Integer actividadId;
    private Integer sedeId;
    private Date fecha;
    private String lugarFisico;
    //Otros
    private String mensajeConfirmacion;
    private ProgramacionEvento programacionEvento;
    //Búsqueda
    private String busquedaPor;
    private Integer criterioBusqueda;
    private Integer valorBusqueda;

    public crearEventoBean() {
    }

    public Integer getCriterioBusqueda() {
        return criterioBusqueda;
    }

    public void setCriterioBusqueda(Integer criterioBusqueda) {
        this.criterioBusqueda = criterioBusqueda;
    }

    public String getBusquedaPor() {
        return busquedaPor;
    }

    public void setBusquedaPor(String busquedaPor) {
        this.busquedaPor = busquedaPor;
    }

    public Integer getValorBusqueda() {
        return valorBusqueda;
    }

    public void setValorBusqueda(Integer valorBusqueda) {
        this.valorBusqueda = valorBusqueda;
    }

    public String getMensajeConfirmacion() {
        return mensajeConfirmacion;
    }

    public void setMensajeConfirmacion(String mensajeConfirmacion) {
        this.mensajeConfirmacion = mensajeConfirmacion;
    }

    public Integer getActividadId() {
        return actividadId;
    }

    public void setActividadId(Integer actividadId) {
        this.actividadId = actividadId;
    }

    public Integer getSedeId() {
        return sedeId;
    }

    public void setSedeId(Integer sedeId) {
        this.sedeId = sedeId;
    }

    public Date getFecha() {
        return fecha;
    }

    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }

    public String getLugarFisico() {
        return lugarFisico;
    }

    public void setLugarFisico(String lugarFisico) {
        this.lugarFisico = lugarFisico;
    }

    public List<Actividad> getActividadList() {
        actividadList = new ArrayList<>();
        actividadList = myActividadSession.findAll();
        return actividadList;
    }

    public void setActividadList(List<Actividad> actividadList) {
        this.actividadList = actividadList;
    }

    public List<Sede> getSedeList() {
        sedeList = new ArrayList<>();
        sedeList = mySedeSession.findAll();
        return sedeList;
    }

    public void setSedeList(List<Sede> sedeList) {
        this.sedeList = sedeList;
    }

    public List<Usuario> getUsuarioList() {
        usuarioList = myUsuarioSession.findAll();
        return usuarioList;
    }

    public void setUsuarioList(List<Usuario> usuarioList) {
        this.usuarioList = usuarioList;
    }

    public List<SelectItem> getActividadSelectItem() {
        actividadSelectItem = new ArrayList<>();
        for (Actividad actividad : getActividadList()) {
            actividadSelectItem.add(new SelectItem(actividad.getIdActividad(),
                    actividad.getTipo()));
        }
        return actividadSelectItem;
    }

    public void setActividadSelectItem(List<SelectItem> actividadSelectItem) {
        this.actividadSelectItem = actividadSelectItem;
    }

    public List<SelectItem> getSedeSelectItem() {
        sedeSelectItem = new ArrayList<>();
        for (Sede sede : getSedeList()) {
            sedeSelectItem.add(new SelectItem(sede.getIdSede(),
                    sede.getNombre(), sede.getDireccion()));
        }
        return sedeSelectItem;
    }

    public void setSedeSelectItem(List<SelectItem> sedeSelectItem) {
        this.sedeSelectItem = sedeSelectItem;
    }

    public List<SelectItem> getLugarFisicoSelectItem() {
        lugarFisicoSelectItem = new ArrayList<>();
        lugarFisicoSelectItem.add(new SelectItem("SALA DE BAILE", "SALA DE BAILE"));
        lugarFisicoSelectItem.add(new SelectItem("SALA DE AEROBICOS", "SALA DE AEROBICOS"));
        lugarFisicoSelectItem.add(new SelectItem("ESPACIO DE PILATES", "ESPACIO DE PILATES"));
        lugarFisicoSelectItem.add(new SelectItem("CAFETERIA", "CAFETERIA"));
        return lugarFisicoSelectItem;
    }

    public void setLugarFisicoSelectItem(List<SelectItem> lugarFisicoSelectItem) {
        this.lugarFisicoSelectItem = lugarFisicoSelectItem;
    }

    public void submit() {
        programacionEvento = new ProgramacionEvento();

        Sede sede = new Sede();
        sede = mySedeSession.find(sedeId);
        Actividad actividad = new Actividad();
        actividad = myActividadSession.find(actividadId);

        programacionEvento.setActividadidActividad(actividad);
        programacionEvento.setFecha(fecha);
        programacionEvento.setSedeidSede(sede);

        List<Usuario> usuarios = new ArrayList<>();
        String criterio = "";

        switch (criterioBusqueda) {
            case 1:
                criterio = "=";
                break;
            case 2:
                criterio = ">=";
                break;
            case 3:
                criterio = "<=";
                break;
        }
        String genero = "";
        switch (valorBusqueda) {
            case 1:
                genero = "FEMENINO";
                break;
            case 2:
                genero = "MASCULINO";
                break;
        }
        System.out.print("parametros:" + valorBusqueda + "criterio"
                + criterio + "busqueda por: " + busquedaPor + "lugar fisico" + lugarFisico);

        if (busquedaPor.equalsIgnoreCase("Edad")) {
            usuarios = myUsuarioSession.getUsuariosPorEdad(valorBusqueda, criterio);
            System.out.println("Lista de edad:" + usuarios.size());
        } else if (busquedaPor.equalsIgnoreCase("Genero")) {
            usuarios = myUsuarioSession.getUsuariosPorGenero(genero);
            System.out.println("Lista de generos:" + usuarios.size());
        }  else if (busquedaPor.equalsIgnoreCase("Peso")) {
            usuarios = myUsuarioSession.getUsuariosPorPeso(criterio, valorBusqueda);
            System.out.println("Lista de Pesos:" + usuarios.size());
        }
        
        ProgramacionEvento programacionEvento = new ProgramacionEvento();
        try {
            for (int i = 0; i < usuarios.size(); i++) {
                programacionEvento.setIdProgramacionEvento(myprogramacionEventoSession.count() + 1);
                programacionEvento.setActividadidActividad(actividad);
                programacionEvento.setSedeidSede(sede);
                programacionEvento.setFecha(fecha);
                programacionEvento.setLugarFisico(lugarFisico);
                programacionEvento.setUsuarioidUsuario(usuarios.get(i));
                myprogramacionEventoSession.create(programacionEvento);
            }
            setMensajeConfirmacion("Se ha agregado el Evento con asistencia de: " + usuarios.size() + " Deportistas");
        } catch (Exception e) {
            setMensajeConfirmacion("Hubo un error al crear el Evento y asociarlos a los Usuarios");
        }

        

    }
}
